home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Source Code
/
C
/
Frameworks
/
TransSkel 3.24
/
Interface
/
TransSkel.h
< prev
next >
Wrap
Text File
|
1996-01-24
|
15KB
|
404 lines
/*
* prototypes for TransSkel public routines
*
* Compiles under:
* THINK C 7 or 8.
* Metrowerks C 3.0 through 8.0.
*
* Might compile under THINK C 6 with some minor changes.
*
* Assumes that compiler understands nested prototypes.
*
* THINK C Notes:
* You must have THINK C Language Extensions turned on in the
* Edit/Options.../Language Settings dialog (so that the "pascal" keyword
* is recognized, for one thing).
*
* for: TransSkel 3.24
* last edit: 24 January 96
*/
# ifndef __TRANSSKEL_H__
# define __TRANSSKEL_H__
# define skelMajorRelease 3
# define skelMinorRelease 24
/*
* Define symbol as shorthand indicating whether PPC code is being
* generated.
*/
# ifndef skelPPC
# if defined(powerc) || defined(__powerc)
# define skelPPC 1
# else
# define skelPPC 0
# endif
# endif
/*
* Define skelUnivHeaders symbol indicating whether or not the universal
* headers are being used. If they are, then UniversalProcPtr's and
* related machinery can be used. If not, then it's necessary to define
* compatibility macros for UPP's.
*
* If skelUnivHeaders isn't already defined, this fragment figures out
* whether or not the universal headers are being used. GENERATINGPOWERPC
* will be defined if the release 2 headers are in use. USESROUTINEDESCRIPTORS
* will be defined if the release 1 headers are in use. If neither symbol
* is defined, the universal headers are not being used. The value of
* skelUnivHeaders ends up as:
* 0 No universal headers
* 1 Universal headers release 1
* 2 Universal headers release 2
*
* skelUnivHeadersMinor is the minor release number. I'm not sure this matters
* for release 1, so it's always set to 0. For release 2, some of the
* prototypes changed at 2.01 in an incompatible way (e.g., for KeyTranslate())
* so an attempt is made at defining the minor number. PRAGMA_ALIGN_SUPPORTED
# seems to have come into existence at 2.01, so that's used as the test.
*
* This can be overridden by making sure skelUnivHeaders is either
* 0, 1, or 2 before TransSkel.h is processed. If you do this, you should
* also define skelUnivHeadersMinor to the appropriate value.
*/
# ifndef skelUnivHeaders
# ifdef GENERATINGPOWERPC /* Universal headers, release 2 */
# define skelUnivHeaders 2
# ifdef PRAGMA_ALIGN_SUPPORTED
# define skelUnivHeadersMinor 1 /* minor release .01 */
# else
# define skelUnivHeadersMinor 0
# endif
# else
# ifdef USESROUTINEDESCRIPTORS /* Universal headers, release 1 */
# define skelUnivHeaders 1
# define skelUnivHeadersMinor 0
# else /* Old Apple headers */
# define skelUnivHeaders 0
# define skelUnivHeadersMinor 0
# endif /* USESROUTINEDESCRIPTORS */
# endif /* GENERATINGPOWERPC */
# endif /* skelUnivHeaders */
/*
* Compatibility machinery for non-universal header compilation
*
* If skelUnivHeaders is 0, then the universal headers aren't available
* and UPP types won't exist. Instead the UPP types are typedef'd below
* to the equivalent non-universal header types. The types listed here
* are those needed to UPP-ize parameters or return values of TransSkel
* interface functions or structure members.
*/
# if !skelUnivHeaders
typedef ProcPtr UniversalProcPtr;
typedef GrowZoneProcPtr GrowZoneUPP;
typedef ModalFilterProcPtr ModalFilterUPP;
typedef ModalFilterYDProcPtr ModalFilterYDUPP;
typedef pascal void (*UserItemUPP) (DialogPtr d, short item);
# define NewModalFilterProc(proc) (ModalFilterUPP)(proc)
# define NewModalFilterYDProc(proc) (ModalFilterYDUPP)(proc)
# define DisposeRoutineDescriptor(upp) /* as nothing */
# endif /* !skelUnivHeaders */
/*
* Macro for accessing QuickDraw globals (e.g., white, arrow). Some
* compilers can access these as white or &qd.white. Others allow only
* &qd.white (e.g., Metrowerks), others allow only white (e.g., THINK
* Pascal). The default is to use the qd struct. If you need the non-qd
* form, you can supply an override definition of:
* #define SkelQD(global) global
* (This is how the THINK Pascal version of the library is created.)
*/
# ifndef SkelQD
# define SkelQD(global) (qd.global)
# endif
/* window property numbers */
# define skelWPropAll 0 /* pseudo-property */
# define skelWPropModeless 1 /* modeless dialog */
# define skelWPropModal 2 /* modal dialog */
# define skelWPropTool 3 /* tool window */
# define skelWPropMovableModal 4 /* movable modal dialog */
# define skelWPropHelp 5 /* help window */
# define skelWPropText 6 /* text window */
# define skelWPropDisplayWind 7 /* TransDisplay window */
# define skelWPropEditWind 8 /* TransEdit window */
# define skelWPropApplBase 256 /* general-use prop num base */
/* SkelQuery() query selectors */
# define skelQVersion 1 /* TransSkel version */
# define skelQSysVersion 2 /* System software version */
# define skelQHasWNE 3 /* whether has WaitNextEvent() */
# define skelQMBarHeight 4 /* menu bar height */
# define skelQHas64KROM 5 /* whether has 64K ROM */
# define skelQHasColorQD 6 /* whether has Color QuickDraw */
# define skelQInForeground 7 /* whether in foreground */
# define skelQHasGestalt 8 /* whether has Gestalt() */
# define skelQHasAppleEvents 9 /* whether has Apple Events */
# define skelQQDVersion 10 /* QuickDraw version */
# define skelQGrayRgn 11 /* Desktop region */
# define skelQHasThreads 12 /* whether has Thread Manager */
/* window property types */
typedef struct SkelWindProperty SkelWindProperty, **SkelWindPropHandle;
struct SkelWindProperty
{
short skelWPropType;
long skelWPropData;
SkelWindPropHandle skelWPropNext;
};
/*
* Initialization parameters
*
* SkelResumeProcPtr is the same as ResumeProcPtr, but the latter is
* disappearing from Apple's header files because it's not supposed
* to be used under System 7 anymore.
*/
typedef struct SkelInitParams SkelInitParams, *SkelInitParamsPtr;
typedef pascal void (*SkelResumeProcPtr)(void);
struct SkelInitParams
{
short skelMoreMasters;
GrowZoneUPP skelGzProc;
SkelResumeProcPtr skelResumeProc;
Size skelStackAdjust;
};
/*
* typedefs for pointers to various sorts of functions used by TransSkel
* routines.
*/
typedef pascal void (*SkelIdleProcPtr) (void);
typedef pascal Boolean (*SkelEventHookProcPtr) (EventRecord *);
typedef pascal void (*SkelSuspendResumeProcPtr) (Boolean inForeground);
typedef pascal void (*SkelClipCvtProcPtr) (Boolean inForeground);
typedef pascal void (*SkelAEHandlerProcPtr) (EventRecord *);
/* ------------- */
/* Core routines */
/* ------------- */
/* initialization/termination routines */
pascal void SkelGetInitParams (SkelInitParamsPtr initParams);
pascal void SkelInit (SkelInitParamsPtr initParams);
pascal void SkelCleanup (void);
/* event-loop-related routines */
pascal void SkelEventLoop (void);
pascal void SkelStopEventLoop (void);
pascal void SkelRouteEvent (EventRecord *evt);
pascal void SkelActivate (WindowPtr w, Boolean active);
pascal void SkelClose (WindowPtr w);
pascal EventRecord *SkelGetCurrentEvent (void);
pascal short SkelGetModifiers (void);
pascal void SkelSetEventMask (short mask);
pascal short SkelGetEventMask (void);
pascal void SkelSetDlogMask (short mask);
pascal short SkelGetDlogMask (void);
pascal void SkelSetIdle (SkelIdleProcPtr p);
pascal SkelIdleProcPtr SkelGetIdle (void);
pascal void SkelSetEventHook (SkelEventHookProcPtr p);
pascal SkelEventHookProcPtr SkelGetEventHook (void);
pascal void SkelSetSuspendResume (SkelSuspendResumeProcPtr p);
pascal SkelSuspendResumeProcPtr SkelGetSuspendResume (void);
pascal void SkelSetClipCvt (SkelClipCvtProcPtr p);
pascal SkelClipCvtProcPtr SkelGetClipCvt (void);
pascal void SkelSetWaitTimes (long fgTime, long bgTime);
pascal void SkelGetWaitTimes (long *pFgTime, long *pBgTime);
pascal void SkelSetThreadTimes (long fgTime, long bgTime);
pascal void SkelGetThreadTimes (long *pFgTime, long *pBgTime);
pascal void SkelSetAEHandler (SkelAEHandlerProcPtr p);
pascal SkelAEHandlerProcPtr SkelGetAEHandler (void);
/* window handling routines */
typedef pascal void (*SkelWindMouseProcPtr) (Point where, long when, short modifiers);
/*
* Key handler needs special treatment because for prototyped functions
* (which TransSkel uses), THINK C passes character arguments in the *high*
* byte of a two-byte stack value. To make sure the values are passed in the
* low byte from either C or Pascal key handlers, the first two arguments are
* passed in shorts. In Pascal, the key procedure should
* look like this:
* procedure Key (c: char; code: Integer; modifiers: Integer);
*/
typedef pascal void (*SkelWindKeyProcPtr) (short c, short code, short modifiers);
typedef pascal void (*SkelWindUpdateProcPtr) (Boolean resized);
typedef pascal void (*SkelWindActivateProcPtr) (Boolean active);
typedef pascal void (*SkelWindCloseProcPtr) (void);
typedef pascal void (*SkelWindClobberProcPtr) (void);
typedef pascal void (*SkelWindIdleProcPtr) (void);
typedef pascal void (*SkelWindSelectProcPtr) (DialogPtr dlog, short item);
typedef pascal void (*SkelWindZoomProcPtr) (WindowPtr w, short zoomDir);
pascal Boolean SkelWindow (WindowPtr w,
SkelWindMouseProcPtr doMouse,
SkelWindKeyProcPtr doKey,
SkelWindUpdateProcPtr doUpdate,
SkelWindActivateProcPtr doActivate,
SkelWindCloseProcPtr doClose,
SkelWindClobberProcPtr doClobber,
SkelWindIdleProcPtr doIdle,
Boolean idleFrontOnly);
pascal Boolean SkelDialog (DialogPtr dlog,
ModalFilterProcPtr doFilter,
SkelWindSelectProcPtr doSelect,
SkelWindCloseProcPtr doClose,
SkelWindClobberProcPtr doClobber);
pascal void SkelRmveWind (WindowPtr w);
pascal void SkelRmveDlog (DialogPtr dlog);
pascal Boolean SkelWindowRegistered (WindowPtr w);
pascal Boolean SkelIsDlog (WindowPtr w);
pascal Boolean SkelIsMMDlog (WindowPtr w);
pascal void SkelSetGrowBounds (WindowPtr w,
short hLo, short vLo,
short hHi, short vHi);
pascal void SkelSetZoom (WindowPtr w, SkelWindZoomProcPtr pZoom);
pascal SkelWindZoomProcPtr SkelGetZoom (WindowPtr w);
pascal Boolean SkelGetRectDevice (Rect *rp, GDHandle *gd, Rect *devRect, Boolean *isMain);
pascal Boolean SkelGetWindowDevice (WindowPtr w, GDHandle *gd, Rect *devRect);
pascal void SkelGetWindContentRect (WindowPtr w, Rect *rp);
pascal void SkelGetWindStructureRect (WindowPtr w, Rect *rp);
pascal short SkelGetWindTitleHeight (WindowPtr w);
pascal Boolean SkelAddWindProp (WindowPtr w, short propType, long propData);
pascal void SkelRmveWindProp (WindowPtr w, short propType);
pascal SkelWindPropHandle SkelGetWindProp (WindowPtr w, short propType);
pascal long SkelGetWindPropData (WindowPtr w, short propType);
/* menu handling routines */
typedef pascal void (*SkelMenuSelectProcPtr) (short item);
typedef pascal void (*SkelMenuClobberProcPtr) (MenuHandle m);
typedef pascal void (*SkelMenuHookProcPtr) (void);
pascal Boolean SkelMenu (MenuHandle m,
SkelMenuSelectProcPtr doSelect,
SkelMenuClobberProcPtr doClobber,
Boolean subMenu,
Boolean drawBar);
pascal void SkelRmveMenu (MenuHandle m);
pascal void SkelSetMenuHook (SkelMenuHookProcPtr p);
pascal SkelMenuHookProcPtr SkelGetMenuHook (void);
/* environment information routines */
pascal long SkelQuery (short selector);
pascal Boolean SkelTrapAvailable (short theTrap);
pascal Boolean SkelGestaltCheck (OSType selector, short featureCode);
/* ------------------ */
/* Auxiliary routines */
/* ------------------ */
# define skelAppleMenuID 128
pascal void SkelApple (StringPtr items, SkelMenuSelectProcPtr pSelect);
pascal void SkelDoEvents (short mask);
pascal void SkelDoUpdates (void);
pascal ModalFilterUPP SkelDlogFilter (ModalFilterUPP filter, Boolean doReturn);
pascal ModalFilterYDUPP SkelDlogFilterYD (ModalFilterYDUPP filter, Boolean doReturn);
pascal void SkelRmveDlogFilter (void);
pascal void SkelDlogDefaultItem (short item);
pascal void SkelDlogCancelItem (short item);
pascal void SkelDlogTracksCursor (Boolean track);
pascal Boolean SkelCmdPeriod (EventRecord *evt);
/* -------------------- */
/* Convenience routines */
/* -------------------- */
/* positioning types for SkelGetReferenceRect()/SkelPositionWindow() */
# define skelPositionNone 0 /* leave as is */
# define skelPositionOnMainDevice 1 /* position on main device */
# define skelPositionOnParentWindow 2 /* position on FrontWindow() */
# define skelPositionOnParentDevice 3 /* position on FrontWindow()'s device */
pascal void SkelGetMainDeviceRect (Rect *r);
pascal void SkelPositionRect (Rect *refRect, Rect *r, Fixed hRatio, Fixed vRatio);
pascal void SkelGetReferenceRect (Rect *r, short positionType);
pascal void SkelPositionWindow (WindowPtr w, short positionType, Fixed hRatio, Fixed vRatio);
pascal Boolean SkelTestRectVisible (Rect *r);
/* alert presentation routines */
pascal short SkelAlert (short alrtResNum, ModalFilterUPP filter, short positionType);
pascal void SkelSetAlertPosRatios (Fixed hRatio, Fixed vRatio);
pascal void SkelGetAlertPosRatios (Fixed *hRatio, Fixed *vRatio);
/* control manipulation routines */
pascal Boolean SkelHiliteControl (ControlHandle ctrl, short hilite);
pascal void SkelDrawButtonOutline (ControlHandle ctrl);
pascal void SkelEraseButtonOutline (ControlHandle ctrl);
pascal void SkelFlashButton (ControlHandle ctrl);
pascal short SkelToggleCtlValue (ControlHandle ctrl);
/* dialog item manipulation routines */
pascal ControlHandle SkelGetDlogCtl (DialogPtr d, short item);
pascal Boolean SkelSetDlogCtlHilite (DialogPtr d, short item, short hilite);
pascal short SkelGetDlogCtlHilite (DialogPtr d, short item);
pascal void SkelSetDlogCtlValue (DialogPtr d, short item, short value);
pascal short SkelGetDlogCtlValue (DialogPtr d, short item);
pascal short SkelToggleDlogCtlValue (DialogPtr d, short item);
pascal void SkelSetDlogCtlRefCon (DialogPtr d, short item, long value);
pascal long SkelGetDlogCtlRefCon (DialogPtr d, short item);
pascal void SkelSetDlogStr (DialogPtr d, short item, StringPtr str);
pascal void SkelGetDlogStr (DialogPtr d, short item, StringPtr str);
pascal void SkelSetDlogRect (DialogPtr d, short item, Rect *r);
pascal void SkelGetDlogRect (DialogPtr d, short item, Rect *r);
pascal void SkelSetDlogProc (DialogPtr d, short item, UserItemUPP proc);
pascal UserItemUPP SkelGetDlogProc (DialogPtr d, short item);
pascal void SkelSetDlogType (DialogPtr d, short item, short type);
pascal short SkelGetDlogType (DialogPtr d, short item);
pascal void SkelSetDlogRadioButtonSet (DialogPtr dlog, short first, short last, short choice);
pascal void SkelSetDlogButtonOutliner (DialogPtr d, short item);
pascal void SkelSetDlogCursor (DialogPtr d);
pascal Boolean SkelDlogMapKeyToButton (DialogPtr d, EventRecord *evt, short *item,
short defaultItem, short cancelItem);
pascal void SkelPause (long ticks);
# endif /* __TRANSSKEL_H__ */